﻿Public Partial Class gestionHorariosLaboratorios
    Inherits System.Web.UI.Page

    '****************************************************************************************
    '************ PROCEDIMIENTOS PRIVADOS PARA USO DESDE EL CONTROL DE EVENTOS **************
    '****************************************************************************************

    'Rellena las opciones del DDLOperaciones por código
    Private Sub rellenar_operaciones()
        'Dim permisos As ArrayList = Session(Comun._VARIABLE_PERMISOS)

        DDLOperaciones.Items.Clear()
        DDLOperaciones.Items.Add(New ListItem("<Seleccione una operación...>", "ninguna"))
        DDLOperaciones.Items.Add(New ListItem("Guardar como nueva version...", "guardar_nueva_version"))
        DDLOperaciones.Items.Add(New ListItem("Guardar como plantilla...", "guardar_plantilla"))


        DDLOperaciones.DataBind()

    End Sub

    'Crea e inicializa las variables de sesión necesarias
    Private Sub inicializar_variables_sesion()
        'Recogemos la Consulta SQL Diseñada originalmente en el componente y la guardamos
        'En una variable de sesión que sirva de base para el resto de filtros
        Session("ConsultaBasicaHorariosLaboratorios") = SDSHorariosTeoria.SelectCommand
        Session("FiltroHorariosLaboratorios") = String.Empty
    End Sub

    'Contruye un filtro SQL a partir de los campos rellenos en la sección de búsquedas
    Private Function contruir_filtro() As String
        Dim filtro As String = String.Empty

        'Nos quedamos con clases de Teoría sólo
        filtro = " WHERE HORARIOS.CODIGO_TIPO_CLASE = 'TE' "

        'Si ha elegido algún curso
        If Not DDLCurso.SelectedValue.Equals("todos") Then
            If String.IsNullOrEmpty(filtro) Then
                filtro = " WHERE "
            Else
                filtro = filtro & " AND "
            End If

            filtro = filtro & " HORARIOS.CODIGO_GRUPO='" & DDLCurso.SelectedValue() & "'"
        End If

        'Si ha elegido algún Periodo
        If Not DDLPeriodo.SelectedValue.Equals("todos") Then
            If String.IsNullOrEmpty(filtro) Then
                filtro = " WHERE "
            Else
                filtro = filtro & " AND "
            End If

            filtro = filtro & " HORARIOS.CODIGO_PERIODO='" & DDLPeriodo.SelectedValue() & "'"
        End If

        Return filtro
    End Function


    'Permite actualizar el horario que se esté mostrando en pantalla
    'en el momento actual en función de las opciones seleccionadas
    'en los DDL's de la sección de Búsquedas
    Private Sub ConfigurarBusqueda()
        Dim filtro As String = String.Empty

        filtro = contruir_filtro()
        Session("FiltroHorariosLaboratorios") = filtro



        'AQUÍ HABRÍA QUE CODIFICAR LO NECESARIO PARA RECARGAR EL CALENDARIO
        'QUE SE ESTÉ MOSTRANDO



        Try

        Catch ex As Exception
            TBErrorDetalles.Text = filtro & " --> " & ex.ToString()
            HFError_ModalPopupExtender.Show()
        End Try
    End Sub

    'Permite actualizar la consulta select del DataSource asociado a GVListadoAlumnos
    'para ser invocado cada vez que, por algún evento haya que actualizarla
    Private Sub RecargarHorarios()
        'si en ese momento se está trabajando con búsquedas avanzadas
        'se recarga tras un evento
        ConfigurarBusqueda()

    End Sub

   

    'Rellena la DDLVersion en función del curso académico, titulación y grupo seleccionados
    Private Sub recargar_DDLVersion()
        Dim filtroVersion As String = String.Empty
        Dim fecha As Date

        Try
            'Si no hay ninguna fecha escrita, se pone el lunes de la semana actual
            If String.IsNullOrEmpty(TBFechaLunes.Text) Then
                fecha = Comun.fecha_lunes_semana(Today)
            Else
                fecha = Comun.fecha_lunes_semana(Convert.ToDateTime(TBFechaLunes.Text))
            End If


            filtroVersion = "SELECT NUMERO_VERSION, CODIGO_HORARIO FROM HORARIOS " & _
                                         "WHERE CURSO_ACADEMICO='" & DDLCurso.SelectedValue & "' " & _
                                            "AND FECHA_LUNES_SEMANA = '" & Comun.convertir_formato_fecha(fecha) & "' " & _
                                            "AND CODIGO_PERIODO='" & DDLPeriodo.SelectedValue & "' " & _
                                            "AND CODIGO_TIPO_HORARIO='" & DDLTipoHorario.SelectedValue & "' " & _
                                         " ORDER BY NUMERO_VERSION DESC"
            Comun.Rellenar_DDL_SinNulos(DDLVersion, filtroVersion, _
                         "CODIGO_HORARIO", "NUMERO_VERSION")
        Catch ex As Exception
            TBErrorDetalles.Text = filtroVersion & " --> " & ex.ToString()
            HFError_ModalPopupExtender.Show()
        End Try

    End Sub


    '****************************************************************************************




    '****************************************************************************************
    '************ PROCEDIMIENTOS DE CONTROL DE EVENTOS **************************************
    '****************************************************************************************

    Private Sub gestionHorariosTeoria_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        'Ocultamos los paneles de aviso y errores
        'para que no se vean en las recargas de la página
        PnlError.Style.Add("display", "none")
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Dim permisos As ArrayList = Session(Comun._VARIABLE_PERMISOS)

        'Comun.establecer_cierre_automatico(Session, Request, Response)

        Try
            'If permisos.Contains("ROL_MODIFICAR_HORARIOS_LABORATORIOS") Then
            'Debido a que cuando un contro GridView ordena, cambia de página o cualquier otro evento
            'tras la recarga de la página se pierde cualquier filtro aplicado previamente,
            'en el evento de carga de la página hay que volver a aplicar los filtros almacenados
            'y volver a vincular los datos

            'Si es la primera vez que se carga la página
            If Not (Page.IsPostBack) Then
                'si es la primera vez que se carga la página
                inicializar_variables_sesion()

                Comun.Rellenar_DDLTodosCursos_SinNulos(DDLCurso)
                Comun.Rellenar_DDL_SinNulos(DDLPeriodo, "SELECT CODIGO_PERIODO, DESCRIPCION_PERIODO FROM PERIODOS", _
                                            "CODIGO_PERIODO", "DESCRIPCION_PERIODO")

                Comun.Rellenar_DDL_SinNulos(DDLTipoHorario, "SELECT CODIGO_TIPO_HORARIO, DESCRIPCION_TIPO_HORARIO FROM TIPOS_HORARIO", _
                                      "CODIGO_TIPO_HORARIO", "DESCRIPCION_TIPO_HORARIO")

                recargar_DDLVersion()

                'Ponemos por defecto el lunes de la semana actual
                TBFechaLunes.Text = String.Format("{0:dd/MM/yyyy}", Comun.fecha_lunes_semana(Today))

                rellenar_operaciones()

                RecargarHorarios()
            End If

            'Else
            '    Comun.salir(Session, Request, Response)
            'End If

            'If Not permisos.Contains("ROL_MODIFICAR_HORARIOS_LABORATORIOS") Then
            '    LblHorariosLaboratorios.Enabled = False
            'End If

            'If Not permisos.Contains("ROL_MODIFICAR_HORARIOS_TUTORIAS") Then
            '    LBHorariosTutorias.Enabled = False
            'End If

            'If Not permisos.Contains("ROL_ADMINISTRADOR") Then
            '    LBAdministracion.Visible = False
            'End If

        Catch ex As Exception
            Comun.salir(Session, Request, Response)
        End Try

    End Sub

    Protected Sub DDLCurso_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DDLCurso.SelectedIndexChanged
        recargar_DDLVersion()
    End Sub

    Protected Sub LBSalir_Click(ByVal sender As Object, ByVal e As EventArgs) Handles LBSalir.Click
        Comun.salir(Session, Request, Response)
    End Sub

    Protected Sub LBErrorDetalles_Click(ByVal sender As Object, ByVal e As EventArgs) Handles LBErrorDetalles.Click
        'Si los detalles están visibles
        If TBErrorDetalles.Visible = True Then
            TBErrorDetalles.Visible = False
            LBErrorDetalles.Text = "Mostar detalles"
        Else 'si están ocultos
            TBErrorDetalles.Visible = True
            LBErrorDetalles.Text = "Ocultar detalles"
        End If
    End Sub


    Protected Sub DDLPeriodo_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DDLPeriodo.SelectedIndexChanged
        recargar_DDLVersion()
    End Sub

    Protected Sub DDLPlantillas_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DDLTipoHorario.SelectedIndexChanged
        recargar_DDLVersion()
    End Sub

    Protected Sub TBFechaLunes_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles TBFechaLunes.TextChanged
        Dim fechaUsuario As Date = Date.MinValue
        Dim fecha_lunes As Date = Date.MinValue

        'Dado que en el mismo control del evento TextChanged cambiamos
        'el valor del TextBox, comprobamos que sólo se ejecute como 
        'consecuencia de un evento de usuario (PostBack), porque de lo
        'contrario se mete en un bucle infinito
        If Page.IsPostBack Then

            'Si ha escrito alguna fecha
            If Not String.IsNullOrEmpty(TBFechaLunes.Text) Then
                Try
                    fechaUsuario = Convert.ToDateTime(TBFechaLunes.Text)

                    'Si el día que ha introducido el usuario ya es un lunes
                    If fechaUsuario.DayOfWeek.Equals(DayOfWeek.Monday) Then
                        'No cambiamos nada
                        fecha_lunes = fechaUsuario
                    Else
                        'Lo convertimos en la fecha del lunes de la semana
                        'a la que corresponda el día escrito por el usuario
                        fecha_lunes = Comun.fecha_lunes_semana(fechaUsuario)
                    End If

                    'Lo mostramos bonito :)
                    TBFechaLunes.Text = String.Format("{0:dd/MM/yyyy}", fecha_lunes)

                Catch ex As Exception
                    'No hacemos nada
                End Try
            End If
        End If



    End Sub
End Class